1. Field of the Invention
The present invention relates to the determination of system configuration in computer systems, and more particularly to automatically determining the type and number of processors and the amount of memory and its location throughout a computer system.
2. Discussion of the Prior Art
The number of areas where personal computers are being utilized is growing dramatically. The areas are varied, and as a result, have different requirements for the various subsystems forming a complete computer system. For example, personal computers used primarily for word processing have relatively modest requirements for installed memory and processor subsystems, have very high performance requirements for the mass storage subsystem and have varying requirements for the display subsystem, depending on the exact application, such as high resolution desktop publishing or simpler letter production, being performed. A data storage and retrieval oriented system needs larger amounts of memory, a faster processor, may have lesser mass storage requirements and generally has minimal display requirements. Complex spreadsheet applications require very large amounts of memory, high performance processors, average capability mass storage subsystems and have display requirements which vary depending on whether complex graphic presentations are desired. Simple spreadsheet applications need standard amounts of memory, average performance processors, average capability mass storage subsystems and have the same display requirements as complex spreadsheet applications. Computer automated design systems require large amounts of memory, very high performance processors, high performance mass storage systems and very high performance display components.
Because of production volume requirements and the reduced costs as volumes increase, it is desirable that as many common features as possible are combined into high volume boards. This has happened in the personal computer area by developing basic units of varying processor performance levels, with the other subsystems incorporated by the inclusion of interchangeable modules. Modules of the desired performance level are incorporated into the basic unit to tailor the basic processor unit to the desired complete computer system. Because of the inherent flexibility of this design approach, it becomes difficult to develop a single piece of software to control the system. The software cannot depend on a given configuration being present and so arrangements must be made to allow the software to understand the specific configuration. Additionally, the provisions must be made so the various modules forming the subsystems do not interfere with each other.
Personal computers have evolved from single microprocessor-based systems to computers systems capable of incorporating multiple processors. Some multi-processor personal computer systems are initially offered with a single microprocessor, referred to as the primary processor, and one or more processor expansion slots into which may be inserted additional microprocessors, referred to as secondary processors. This provides added flexibility to the user because the number of microprocessors present within the computer system can be tailored to fit individual needs. However, the inclusion of optional microprocessor slots in personal computer systems has exacerbated software and hardware configuration problems because the system must now determine the type and number of processors present within the system.
The software and hardware configuration problems are also quite true in memory subsystems where it is common for the subsystem to be originally installed by a system integrator at one level and then changed by a relatively unskilled user. The change is performed by adding memory integrated circuits, either into previously available locations in a preexisting module, or changing the number or type of incorporated memory modules. This situation is further complicated because personal computers related to or compatible with products produced by International Business Machines Corporation have undergone a very complicated memory expansion path because of limitations in the various processors, operating systems, and designs which have developed over the years. As a result, various competing systems and memory allocation conflicts have developed, so that determining and setting memory size and location is extremely difficult.
Until recently, indication of memory size and location was performed by appropriately setting switches or jumpers provided by the manufacturer of the memory subsystem. This required that the person installing or upgrading the memory subsystem had a good knowledge of the environment, that is, the intended size of the memory components and location where they were to be located, both physically and in the address space of the computer, and where any other existing memory subsystem components were located. This knowledge requirement either made the installation very difficult for the unskilled owner or required installation by a skilled person, usually at a relatively large expense. The unskilled owner had to try and follow the often difficult to interpret instructions and hoped to get everything right. If not, the owner had to try again, thereby expending valuable time. After a sufficient number of unsuccessful attempts, the unskilled owner generally contacted a skilled individual for assistance. Thus, much time and effort was expended with minimal results.
It was therefore desirable that the memory size and address location be determined automatically and that any determined errors be indicated to the installer to allow a minimum of time and effort to be expended when installing or modifying a memory subsystem. One solution to the problem of memory configuration determination included an apparatus that automatically determined the maximum amount of memory available and its physical and address locations, determined if the memory was correctly installed, indicated any errors to the operator and enabled the maximum usable amount of memory. The apparatus included a base memory board which included a series of permanently enabled signals to indicate the amount of memory on the board. The signals were provided to a buffer which was connected to the data bus, enabling the system to read the state of the signals provided to the buffer. The base memory board had a series of connectors for addition of memory modules. Each memory module included a series of permanently enabled signals to indicate the amount of memory installed on the module. These signals were transmitted from the memory module to the buffer on the base board. If no memory module was installed in a given connector, the signals associated with that connector were set at a predefined level. The signals were provided to a buffer which was connected to the data bus, enabling the system to read the state of the signals provided to the buffer.
The above method for memory configuration determination proved satisfactory for awhile. However, as the number of memory modules and external memory cards increased, the total width of the buffer that held the memory configuration information became unwieldy. In addition, the incorporation of multiple processors in computer systems and the desirability that the type and number of processors resident in the computer system be determined automatically with the memory configuration information exacerbated the problem of the buffer width with regard to the system configuration information. Increased numbers of the relatively few available input/output (I/O) ports were needed to pass the buffer configuration information to the system for determination of the type and number of processors as well as the identification and location of memory modules in the system. Therefore, it became desirable that processor and memory module configuration information be determined automatically with the use of a minimal width buffer, thereby allowing a minimal number of I/O ports to be used to pass this information to the system.